<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

</body>
</html>

<script>
// 什么叫 垃圾回收/内存释放  ->  GC  ->  Garbage Collection
  // 释放内存空间(不需要被用到的变量，其内存空间 可以被释放)

let arr = new Array(10000000);
arr.fill({
  name: 123
}); // 内存当中，有了 10万条 {name: 123} 的数据

// const n1 = arr; // 注：必须没有 任何 变量 指向 内存的堆空间，则垃圾回收时，才会将该内存释放。

// 全局变量，即全局作用域中 声明的变量：只要浏览器 tab 页面不关闭，其变量指向的数据
  // 不会被释放


// 假设用 arr 在页面上 绘制 了 DOM元素；
  // 绘制完，arr 的数据从此不再被需要
  // 所以，如何 释放 arr 对应的内存空间？
    // 方法：
    // arr = null;  // 下次 垃圾回收时，会将 arr 指向的内存空间 ，清空

// ----------------  全局作用域 内存释放 总结：
/* 垃圾回收机制：
  1. 全局变量，不会被 垃圾回收
  2. 垃圾回收，是 浏览器 定时执行的机制；（具体什么时候执行，开发者不需要知道）
  3. 浏览器执行垃圾回收的机制是：逐个查看 内存当中的 堆空间，若该空间 没有 变量指向它，
      则 该内存空间被释放。
*/


// ----------------------  函数当中 内存释放的逻辑：  -------------------------------
/* 
 函数执行的时候，对函数体内代码，进行对应内存空间的开辟
 待函数执行完毕时，下次垃圾回收，会将 函数体代码开辟的内存空间，释放
*/
function f() {
  let arr = new Array(100000);
  arr.fill({
    xxx: 'xxx'
  })
}

// arr.forEach(f);

</script>